Skulls, as alterações nas sources que mencionei se aplicam somente ao caso do sistema da PxG. Essa estátua pode ser escrita puramente em Lua. Entretanto, ainda é preciso de mais algumas informações quanto ao sistema de ataque dela (se será de x em x tempo, constante; chance de ativação, em tempo constante ou variável/aleatório; etc). Se o autor puder informar-nos quanto a isso, suponho que não haverão mais dúvidas para começar a escrita dos pedidos.
Bom, em relação a chance de ataque, tempo .. fica a criterio de vocês tudo isso, pode cria a spell qualquer coisa eu modifico isso, pode ser de 2 em 2 segundos os ataques da estatua "ataque em death" lembrando que ela apos conjurada ataque todos que estive a 5 sqm dela em target aleatoriamente "so não ataque quem a sumonou"
info
Group: Herói
Joined: 25/02/07
Posts: 859
Reputation: +331
Gender: Masculino

Sim, claro são dois contextos separados. Eu queria saber pq fiz em lua uma forma de monstros lutarem entre si e fiquei pensando se com npcs seria mais fácil. Mas essa questão de vida e de morrer complica.Skulls, as alterações nas sources que mencionei se aplicam somente ao caso do sistema da PxG. Essa estátua pode ser escrita puramente em Lua. Entretanto, ainda é preciso de mais algumas informações quanto ao sistema de ataque dela (se será de x em x tempo, constante; chance de ativação, em tempo constante ou variável/aleatório; etc). Se o autor puder informar-nos quanto a isso, suponho que não haverão mais dúvidas para começar a escrita dos pedidos.
Alguém vai poder me ajudar referente a isso?
info
Group: Herói
Joined: 14/02/14
Posts: 341
Reputation: +285
Gender: Masculino
Tibia Character: Night Wolf

eu te ajudo no primeiro e no terceiro porque to curioso em como o Zipter vai fazer o segundo..
Só aguenta eu ter um tempo maior livre pra sentar e testar isso pra não te entregar um código feito às pressas e que pode ter bugs.
info
Group: Herói
Joined: 25/02/07
Posts: 859
Reputation: +331
Gender: Masculino

eu te ajudo no primeiro e no terceiro porque to curioso em como o Zipter vai fazer o segundo..
Só aguenta eu ter um tempo maior livre pra sentar e testar isso pra não te entregar um código feito às pressas e que pode ter bugs.
Acabei fazendo a 2 aqui de bobeira xD
Tente isso:
<instant name="Statue Attack" words="utevo res statue" lvl="1" mana="500" prem="0" exhaustion="20000" groups="1,4000" icon="23" needlearn="0" event="script" value="attack/statue.lua">
<vocation id="1"/>
<vocation id="2"/>
<vocation id="3"/>
<vocation id="4"/>
<vocation id="5"/>
<vocation id="6"/>
<vocation id="7"/>
<vocation id="8"/>
</instant>
Em um arquivo chamado statue.lua, dentro de spells/attack coloque o codigo:
local config = {
statue = 1444,
range = 5,
max_dmg = -150,
min_dmg = -50,
hit_delay = 1000,
statue_time = 10*1000,
cd = 20,
stg = 5570
}
local max_hits = config.statue_time/config.hit_delay
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_DAMAGE, 0, config.min_dmg, 0, config.max_dmg)
local condition = createConditionObject(CONDITION_INFIGHT)
setConditionParam(condition, CONDITION_PARAM_TICKS, 10 * 1000)
function removeItem(pos)
doRemoveItem(getTileItemById(pos, config.statue).uid)
end
function attackSpecs(cid, pos, var, hits)
n = hits or 0
if n >= max_hits then return false end
local spec = getSpectators(pos, config.range, config.range)
i = spec[math.random(1, #spec)]
if #spec <= 1 then return false end
while(i == cid) do
i = spec[math.random(1, #spec)]
end
if isCreature(i) then
var.pos = getCreaturePosition(i)
doSendDistanceShoot(pos, var.pos, CONST_ANI_SUDDENDEATH)
doCombat(cid, combat, var)
end
addEvent(attackSpecs, config.hit_delay, cid, pos, var, n+1)
end
function itemInteraction(cid, pos, var)
attackSpecs(cid, pos, var)
addEvent(removeItem, config.statue_time, pos)
end
function onCastSpell(cid, var)
if not isPlayer(cid) then return false end
if getPlayerStorageValue(cid, config.stg) - os.time() <= 0 then
doAddCondition(cid, condition)
setPlayerStorageValue(cid, config.stg, os.time() + config.cd)
local pos = Position(getCreaturePosition(cid).x+1, getCreaturePosition(cid).y, getCreaturePosition(cid).z)
doCreateItem(config.statue, 1, pos)
itemInteraction(cid, pos, var)
else
doPlayerSendCancel(cid, "You're exhausted.")
end
return true
end
Me dê retorno.
gif dela:

Abraços,
ps: você não deu maiores detalhes como no que depende o dano, velocidade dos hits, nem cooldown, qual estatua usar, etc. Então fiz do jeito que preferi, mas é altamente customizável basta mexer/pedir.
Edited Fevereiro 11 by Skulls
Retornei , irei testar e retorno pra avisar!
info
Group: Herói
Joined: 25/02/07
Posts: 859
Reputation: +331
Gender: Masculino

Terceira:
<instant name="Skell Summon" words="utevo res skell" lvl="1" mana="500" prem="0" exhaustion="1" groups="1,1" icon="23" needlearn="0" event="script" value="attack/skellsummon.lua">
<vocation id="1"/>
<vocation id="2"/>
<vocation id="3"/>
<vocation id="4"/>
<vocation id="5"/>
<vocation id="6"/>
<vocation id="7"/>
<vocation id="8"/>
</instant>
local config = {
creature = "Demon",
summon_time = 15*1000,
cd = 20,
stgs = {cd = 5571, remove = 5572},
life_percent = 20
}
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
local condition = createConditionObject(CONDITION_INFIGHT)
setConditionParam(condition, CONDITION_PARAM_TICKS, 15 * 1000)
function removeSummon(cid)
if getPlayerStorageValue(cid, config.stgs.remove) == -1 then return false end
if not isPlayer(cid) then return false end
summons = getCreatureSummons(cid)
for _, i in pairs(summons) do
if isCreature(i) then
if getCreatureName(i) == config.creature then
doRemoveCreature(i)
setPlayerStorageValue(cid, config.stgs.remove, -1)
doRemoveCondition(cid, CONDITION_INFIGHT)
return true
end
end
end
return false
end
function onCastSpell(cid, var)
if not isPlayer(cid) then return false end
if getPlayerStorageValue(cid, config.stgs.remove) ~= -1 then
summons = getCreatureSummons(cid)
for _, i in pairs(summons) do
if isCreature(i) then
if getCreatureName(i) == config.creature then
doRemoveCreature(i)
setPlayerStorageValue(cid, config.stgs.remove, -1)
doCreatureAddHealth(cid, getCreatureMaxHealth(cid)*config.life_percent/100)
doCombat(cid, combat, var)
doRemoveCondition(cid, CONDITION_INFIGHT)
return true
end
end
end
return false
end
if getPlayerStorageValue(cid, config.stgs.cd) - os.time() <= 0 then
doAddCondition(cid, condition)
setPlayerStorageValue(cid, config.stgs.cd, os.time() + config.cd)
setPlayerStorageValue(cid, config.stgs.remove, 1)
doCombat(cid, combat, var)
monster = doSummonCreature(config.creature, getCreaturePosition(cid))
doConvinceCreature(cid, monster)
addEvent(removeSummon, config.summon_time, cid)
else
doPlayerSendCancel(cid, "You're exhausted.")
end
return true
end
Testa ai e ve se ta no jeito.
PS: mude o nome de Demon para o monstro que você quiser.
Abraços,
EDITADO:
SOBRE A PRIMEIRA SPELL ELA EH AREA 3x3 EM VOLTA DO PLAYER OU DIRECIONADA?
Edited Fevereiro 10 by Skulls
info
Group: Herói
Joined: 14/02/14
Posts: 341
Reputation: +285
Gender: Masculino
Tibia Character: Night Wolf

faz atacar só um target dos specs, todos fica zoado. Aí fica semelhante à torre do league
info
Group: Herói
Joined: 25/02/07
Posts: 859
Reputation: +331
Gender: Masculino

faz atacar só um target dos specs, todos fica zoado. Aí fica semelhante à torre do league
Tambem acho, mas pelo pedido dele acho que são todos mesmo, não?
info
Group: Herói
Joined: 14/02/14
Posts: 341
Reputation: +285
Gender: Masculino
Tibia Character: Night Wolf

lembrando que ela apos conjurada ataque todos que estive a 5 sqm dela em target aleatoriamente
não sei dizer... eu entendi q queria que atacasse todos mas um por vez, de forma aleatoria.
info
Group: Herói
Joined: 25/02/07
Posts: 859
Reputation: +331
Gender: Masculino

Hm, pode ser. Mudarei isso então, fica até mais simples, pq ao inves de for terá um random. xDnão sei dizer... eu entendi q queria que atacasse todos mas um por vez, de forma aleatoria.
Editei la da forma que você sugeriu.
Fiz a spell1 do jeito que eu entendi, não sei se está do jeito que você queria mas com alguns ajustes chegamos lá:
<instant name="Spell1" words="baratask spell1" lvl="1" mana="100" prem="0" exhaustion="20000" groups="1,2000" icon="23" needlearn="0" event="script" value="attack/spell1.lua">
<vocation id="1"/>
<vocation id="2"/>
<vocation id="3"/>
<vocation id="4"/>
<vocation id="5"/>
<vocation id="6"/>
<vocation id="7"/>
<vocation id="8"/>
</instant>
local config = {
cd = 20,
hit_delay = 2000,
stg = 5573,
life_percent = 5,
mana_percent = 10,
hits = 3
}
local combat = createCombatObject()
local area = createCombatArea(AREA_SQUARE3X3)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatArea(combat, area)
function onTargetCreature(cid, target)
if not isCreature(target) then return false end
local healthDmg = -getCreatureHealth(target)*config.life_percent/100
local manaDmg = -getCreatureMana(target)*config.mana_percent/100
doSendMagicEffect(getCreaturePosition(target), CONST_ME_MAGIC_RED)
doTargetCombatHealth(cid, target, COMBAT_LIFEDRAIN, healthDmg, healthDmg, CONST_ME_MAGIC_RED)
doTargetCombatMana(cid, target, manaDmg, manaDmg, CONST_ME_MAGIC_BLUE)
return true
end
setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")
function attack(cid, var, hits)
n = hits or 0
if n >= config.hits then return false end
doCombat(cid, combat, var)
addEvent(attack, config.hit_delay, cid, var, n+1)
end
function onCastSpell(cid, var)
if not isPlayer(cid) then return false end
if getPlayerStorageValue(cid, config.stg) - os.time() <= 0 then
setPlayerStorageValue(cid, config.stg, os.time() + config.cd)
attack(cid, var)
else
doPlayerSendCancel(cid, "You're exhausted.")
end
return true
end
Up, e ao cara funcionou?!
Edited Fevereiro 11 by Skulls
Sim, de forma aleatoria rs, mas vlw mesmo pela força de vcs to muito grato pela atenção.
info
Group: Herói
Joined: 25/02/07
Posts: 859
Reputation: +331
Gender: Masculino

Por nada cara. Mais alguma coisa ou tudo resolvido?Sim, de forma aleatoria rs, mas vlw mesmo pela força de vcs to muito grato pela atenção.
Caso esteja, marque como resolvido para moverem o tópico. Abraços!
Edited Fevereiro 12 by Skulls




info
Group: Campones
Joined: 06/06/08
Posts: 29
Reputation: +3
Bom, estou muito agradecido por vocês estarem se empenhando para me ajudar, eu estou desenvolvendo 1 projeto que na verdade é um sonho que estou realizando eu sou um pouco leigo em relação a criação de scripts e programação, sou um mero mapper, mas sempre que posso mecho com script.
obrigado, aguardo resultado de vcs para me ajudar com esses 3 pedidos, de coração mesmo!
Segue link do projeto: http://www.xtibia.com/forum/topic/239277-worldofempera-rpg/